/********************************************************************************
 *      Copyright:  (C) 2025 LingYun IoT System Studio
 *                  All rights reserved.
 *
 *       Filename:  sqlite3_handler.h
 *    Description:  This file 
 *
 *        Version:  1.0.0(2025年04月26日)
 *         Author:  lijiahui <2199250859@qq.com>
 *      ChangeLog:  1, Release initial version on "2025年04月26日 11时24分16秒"
 *                 
 ********************************************************************************/

#ifndef SQLITE
#define SQLITE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>

#include "logger.h"
#include "pack.h"

//链表中的一个节点，保存了一条数据库记录
typedef struct DataNode{
    int                 db_id;//数据库中这一行的id，用于删除
    pack_t              data;//存放这个记录里的时间、设备号、温度
    struct DataNode*    next;//指向下一个节点
}DataNode;

//整个链表的“头指针”和计数器包装结构体
typedef struct{
    DataNode*   head;//链表头指针
    int         count;//总共查询到了多少条记录
}DataList;

/* 调用fetch_pack_list()就会从数据库里查出所有未上传的数据，他们会用DataNode链成一个链表，整个链表用一个DataList管理（方便知道有多少>条，也好释放） */

int fetch_first_pack(sqlite3 *db,pack_t *pack_out,int *db_id_out);
int init_db(const char *db_path,sqlite3 **db);
int save_pack_to_db(sqlite3 *db,const pack_t *pack);//存储一条记录到数据库
int fetch_pack_list(sqlite3 *db,DataList *list);//查询所有暂存数据
int delete_pack_by_id(sqlite3 *db,int id);//删除一条已上传记录
void free_data_list(DataList *list);//释放链表内存


#endif
